const mongoose = require('./db.js');

/**
 * 订单模型
 * 用于管理系统中的订单信息，包括订单状态、积分、金额等
 * 支持安卓和iOS系统的订单处理
 */
let orderSchema = new mongoose.Schema({
	orderNumber: {
		type: String,
		required: true,
		unique: true,
		index: true,
		// 订单编号，系统自动生成的唯一标识符
	},
	system: {
		type: String,
		default: '安卓',
		enum: ['安卓', 'iOS'],
		// 系统类型，支持安卓和iOS
	},
	type: {
		type: String,
		required: true,
		enum: ['QQ', '微信'],
		// 订单类型，区分不同的应用平台
	},
	status: {
		type: String,
		default: '待扫码',
		index: true,
		// 订单状态，记录订单当前的处理状态
	},
	completedPoints: {
		type: Number,
		default: 0,
		// 已完成积分数量
	},
	totalPoints: {
		type: Number,
		required: true,
		// 订单总积分数量
	},
	remark: {
		type: String,
		default: '',
		// 订单备注信息
	},
	createUser: {
		type: mongoose.Schema.Types.ObjectId,
		ref: 'userMod',
		required: true,
		index: true,
		// 创建订单的用户ID，关联到用户表
	},
	createUserName: {
		type: String,
		required: true,
		// 创建订单的用户名，冗余字段便于查询显示
	},
	createTime: {
		type: Date,
		default: Date.now,
		index: true,
		// 订单创建时间
	},
	isDeleted: {
		type: Boolean,
		default: false,
		index: true,
		// 软删除标记，true表示已删除
	},
	cancelTime: Date, // 订单取消时间
	completeTime: Date, // 订单完成时间
	batchId: {
		type: String,
		required: true,
		index: true,
		// 批次ID，用于标识订单所属的批次，同一批次的订单共享此ID
	},
	externalId: {
		type: String,
		sparse: true,
		index: true,
		// 外链ID，用于关联外部系统的订单标识，可选字段
	},
	screenshots: {
		type: [
			{
				base64:{
					type: String,
				},
				uploadTime: {
					type: Date,
					default: Date.now,
					// 截图上传时间
				},
				description: {
					type: String,
					default: '',
					// 截图描述信息，可选
				},
			},
		],
		default: [],
		// 订单相关截图数组，支持多种类型的截图存储
	},
	opData: {
		type: String,
		default: null,
	},
	taskDeviceName: {
		type: String,
		default: null,
	},
	playDeviceName:{
		type:String,
		default: null,
	},
	balanceCost: {
		type: Number,
		default: 0,
		// 订单消耗的余额
	},
	// 微信登录截图相关字段
	wechatScreenshot: {
		type: String,
		default: null,
		// 微信登录截图的base64数据
	},
	screenshotUpdateTime: {
		type: Date,
		default: null,
		// 截图更新时间
	},
	// 设备登录状态相关字段
	deviceStatus: {
		type: String,
	},
	deviceMessage: {
		type: String,
		default: null,
		// 设备登录状态消息，用于记录失败原因等详细信息
	},
	deviceMessage2: {
		type: String,
		default: null,
		// 设备登录状态消息，用于记录失败原因等详细信息
	},
	deviceLoginTime: {
		type: Date,
		default: null,
		// 设备登录状态更新时间
	},
});

/**
 * 生成订单编号的静态方法
 * 格式：ORD + 时间戳 + 3位随机数
 * 例如：ORD1703123456789123
 */
orderSchema.statics.generateOrderNumber = function () {
	const now = new Date();
	const timestamp = now.getTime().toString(); // 获取当前时间戳
	const random = Math.floor(Math.random() * 1000)
		.toString()
		.padStart(3, '0'); // 生成3位随机数
	return `ORD${timestamp}${random}`; // 返回格式化的订单编号
};

/**
 * 生成批次ID的静态方法
 * 格式：BATCH + 时间戳 + 3位随机数
 * 例如：BATCH1703123456789123
 */
orderSchema.statics.generateBatchId = function () {
	const now = new Date();
	const timestamp = now.getTime().toString(); // 获取当前时间戳
	const random = Math.floor(Math.random() * 1000)
		.toString()
		.padStart(3, '0'); // 生成3位随机数
	return `BATCH${timestamp}${random}`; // 返回格式化的批次ID
};

// 创建并导出订单模型
let orderMod = mongoose.model('orderMod', orderSchema);

module.exports = orderMod;
